C#.NStar (Pre-Pre-Alpha) 0.09@DT



Привет, неизвестный путник! Здесь вы можете просмотреть информацию о C#.NStar (Pre-Pre-Alpha) 0.09@DT. Вы можете скачать EXE или просмотреть список изменений, скриншоты и/или видео.
Что уже проверено и работает в дополнение к версии (Pre-Pre-Alpha) 0.09:
1. ПРЯМАЯ ТРАНСЛЯЦИЯ!!! Благодаря этому большинство программ выполняются так же быстро, как и на C#.NET, если не считать время на анализ, трансляцию и компиляцию, но это время затрачивается однократно, если только не создавать программу внутри программы (а метод ExecuteString() теперь это делает).
2. "Сырые" строки: /"This's a "string" which can contain multiple """"" quotes, @"""verbatim"" strings", back \\\ slashes and /"nested /"raw strings"/"/ (as long as they have paired /" and "/)."/
3. Следующие типы: BaseDictionary[TKey, TValue, TCertain] и его подтипы Dictionary[TKey, TValue] и SortedDictionary[TKey, TValue]; BaseList[T, TCertain] и его подтипы BaseHashSet[T, TCertain], BaseSet[T, TCertain], BaseSumList[T, TCertain], BitList, Buffer[T], ListHashSet[T], NList[T], SumList, а возможно, и другие, все не сосчитать.
4. Кортежи работают частично. Все варианты проверить невозможно, но некоторые ошибки, вероятно, есть.
5. Следующие функции: Fill() (бывшая FillList()) (но, разумеется, только версия без лямбды), Choose() (либо работает без ошибок, либо не работает), Max() (теперь работает с произвольным числом параметров), Mean() (аналогично), Min() (аналогично), BaseDictionary.Remove(), BaseDictionary.TryAdd(), BaseList.Add(), BaseList.Clear(), BaseList.Contains(), BaseList.GetRange(), BaseList.IndexOf(), BaseList.Insert(), BaseList.LastIndexOf(), BaseList.Remove(), BaseList.RemoveAt(), BaseList.RemoveEnd(), BaseList.RemoveValue(), BaseList.Reverse(), BaseList.TrimExcess(), string.CompareTo() (бывшая string.Compare(), теперь является экземплярной). Самая "чувствительная" функция, которая пока не работает - BaseDictionary.Add().
6. Корректное сообщение о делении на ноль.
7. Быстрая конкатенация строк. Теперь можно создать цикл из миллиона s += 'A';, и он отработает очень быстро!
8. Делегаты в параметрах функций и возврат делегатов из функций.
9. Подключение пространств имен.
10. Комментарии трех типов: однострочные от // до перевода строки, многострочные от /* до */ и допускающие вложенность от /{ до }/. Разумеется, последний тип - изобретение Red-Star-Soft.
Что уже проверено и не работает в дополнение к версии (Pre-Pre-Alpha) 0.09:
1. Оператор CombineWith.
2. Переменные типа null.
3. Функции Max3(), Mean3(), Min3() (теперь основные функции Max(), Mean() и Min() работают с любым числом параметров), а также ListWithSingle() (теперь она не нужна, можно просто присвоить один элемент списку с любым числом измерений (мы проверили на 25-мерном списке) (но нельзя присвоить ему кортеж с меньшим числом измерений, нужно предварительно записать его в переменную типа списка, а затем присваивать эту переменную)).
Рабочие примеры кода на C#.NStar:
list(3) int a = (((1, 2, 3), (4, 5, 6), (7, 8, 9)), ((10, 11, 12), (13, 14, 15), (16, 17, 18)), ((19, 20, 21), (22, 23, 24), (25, 26, 27)));
return a[1, 2, 3];




Class MyClass
{
     int a = 5;
     real b = 3.14159;
     string c = "A";
 
     Constructor(bool bool)
     {
          if (bool)
          {
                 a = 12;
          }
     }
}
MyClass a1 = new MyClass();
MyClass a2 = new MyClass(8, 2.71828, "$");
MyClass a3 = new MyClass(8, 2.71828);
MyClass a4 = new MyClass(true);
return (a1, a2, a3, a4);




real a = 0;
loop
{
     if !(a >= 10)
          a++;
     else if !(a >= 12)
     {
          a += 0.25;
          continue;
     }
     else if !(a > null)
          continue;
     else
     {
          break;
     }
}
return a;




real Function F(real x, real y)
{
     return x * x + x * y + y * y;
}
System.Func[real, real, real] f;
f = F;
real a = f(3.14159, 2.71828);
f = Max;
real b = f(3.14159, 2.71828);
return (a, b);




Namespace MyNamespace
{
    Namespace MyNamespace
    {
        Class MyClass
        {
            int a = 5;
            real b = 3.14159;
            string c = "A";

            Constructor(bool bool)
            {
                if (bool)
                    a = 12;
            }
        }
    }
}
MyNamespace.MyNamespace.MyClass a1 = new MyNamespace.MyNamespace.MyClass();
MyNamespace.MyNamespace.MyClass a2 = new MyNamespace.MyNamespace.MyClass(8, 2.71828, "$");
MyNamespace.MyNamespace.MyClass a3 = new MyNamespace.MyNamespace.MyClass(8, 2.71828);
MyNamespace.MyNamespace.MyClass a4 = new MyNamespace.MyNamespace.MyClass(true);
return (a1, a2, a3, a4);




(int, int)[2] Function F()
{
    Class MyClass
    {
        int a = 0;
    }
    MyClass b = new MyClass(5);
    return ((b.a, new MyClass(8).a), (b.a, new MyClass(8).a));
}
return F();




return ExecuteString("return args[1];", Q());



System.Func[int] Function F()
{
    int Function F2()
    {
        return 100;
    }
    return F2;
}
return F()();




Все остальное не проверено и, скорее всего, не работает.

Ссылка на EXE

(~40 MB)

Назад ко всем версиям